package com.supermap.dataHandling.service;

import com.supermap.dataHandling.utils.CombineDirectory;
import com.supermap.dataHandling.utils.FileTool;
import org.pentaho.di.core.exception.KettleException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Created by bruce on 18/8/23 -- 17:34
 */
@Service
public class EtlHandlingService {
    @Autowired
    private EtlService etlService;

    //1、开始把etl的ktr文件移动到指定的目录
    public Boolean moveEtl(String src) {
        //            File etlFile = ResourceUtils.getFile("classpath:etlFile");
        String[] sourceDirNames = {FileTool.etlFile};
        try {
            CombineDirectory.combineDirectory(sourceDirNames, src);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    //2、开始检测传过来的file是否完整
    public Boolean checkFile(String src) {
        File srcFile = new File(src);
//        boolean status = checkAllFile(srcFile);
//        if (!status) {
//            return false;
//        }
        //核对一下，如果没有我就复制一个假的文件过去
        HashMap<String, String> fileMap = new HashMap<>();
        //工业
        fileMap.put(srcFile.getPath() + File.separator + "b_a_1.xls", "b_a_1.xls");
        //能耗
        fileMap.put(srcFile.getPath() + File.separator + "n_1.xls", "n_1.xls");
        //建筑业
        fileMap.put(srcFile.getPath() + File.separator + "c_a.xls", "j_a.xls");
        fileMap.put(srcFile.getPath() + File.separator + "c_b.csv", "j_b.csv");
        //开始核查和复制
        return FileTool.checkFile(srcFile, fileMap);
    }

    /**
     * @author bruce
     * @date 18/9/11 14:04
     * @Description: 描述--核查所有的文件是否存在
     */
    private boolean checkAllFile(File srcFile) {
        List<String> list = new ArrayList<>();
        list.add(srcFile.getPath() + File.separator + "b_a.xls");
        list.add(srcFile.getPath() + File.separator + "b_b.csv");
        //批发零售
        list.add(srcFile.getPath() + File.separator + "e_a.xls");
        list.add(srcFile.getPath() + File.separator + "e_b.xls");
        //服务业
        list.add(srcFile.getPath() + File.separator + "f_a.xls");
        list.add(srcFile.getPath() + File.separator + "f_b.csv");
        //能耗
        list.add(srcFile.getPath() + File.separator + "n.xls");
        //住宿餐饮
        list.add(srcFile.getPath() + File.separator + "s_a.xls");
        list.add(srcFile.getPath() + File.separator + "s_b.csv");
        //房地产
        list.add(srcFile.getPath() + File.separator + "x_a.xls");
        list.add(srcFile.getPath() + File.separator + "x_b.csv");
        //建筑业---3,6,9有
        for (String key : list) {
            File file = new File(key);
            if (!file.exists()) {
                return false;
            }
        }
        return true;
    }

    //3、把原始文件全部重命名一下
    public Boolean renameAllFile(String src) {
        File srcFile = new File(src);
        HashMap<String, String> fileMap = new HashMap<>();
//批发零售
        fileMap.put(srcFile.getPath() + File.separator + "e_a.xls", "p_a.xls");
        fileMap.put(srcFile.getPath() + File.separator + "e_b.csv", "p_b.csv");
//服务业
        fileMap.put(srcFile.getPath() + File.separator + "f_a.xls", "fw_a.xls");
        fileMap.put(srcFile.getPath() + File.separator + "f_b.csv", "fw_b.csv");
//房地产
        fileMap.put(srcFile.getPath() + File.separator + "x_a.xls", "fd_a.xls");
        fileMap.put(srcFile.getPath() + File.separator + "x_b.csv", "fd_b.csv");
//住宿餐饮
        fileMap.put(srcFile.getPath() + File.separator + "s_a.xls", "z_a.xls");
        fileMap.put(srcFile.getPath() + File.separator + "s_b.csv", "z_b.csv");
//建筑业---3,6,9有
        fileMap.put(srcFile.getPath() + File.separator + "c_a.xls", "j_a.xls");
        fileMap.put(srcFile.getPath() + File.separator + "c_b.csv", "j_b.csv");
//
        FileTool.reNameFile(fileMap);
        return true;
    }

    //4、开始计算
    public Boolean startEtl(String src) {
        try {
            return etlService.runJob(src + "//" + "联网直报.kjb",getReportDate(src));
        } catch (KettleException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * @author bruce
     * @date 18/9/28 10:57
     * @Description: 描述--通过文件名获取报告期
     */
    public String getReportDate(String fileDir) {
        File file = new File(fileDir);
        String date = file.getName();
        //20180008-2018_09_21_09_54_29
        String resultYear = date.substring(0, 4);
        String resultMonth = date.substring(6, 8);
        String result = resultYear + resultMonth;
        return result;
    }
}
